package testesOxente;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import oxente.ListaDeReproducao;
import oxente.Musica;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class TestaListaDeReproducao {
	
	ListaDeReproducao lista;

	Musica musica1;
	Musica musica2;
	Musica musica3;

	@Before
	public void testListaDeReproducao() throws Exception {

		lista = new ListaDeReproducao("nome");

		musica1 = new Musica("a1:a2:a3:a4:a5:a6");
		musica2 = new Musica("b1:b2:b3:b4:b5:b6");
		musica3 = new Musica("c1:c2:c3:c4:c5:c6");

	}
	
	@Test (expected = Exception.class)
	public void construtorListaDeReproducao1() throws Exception {
		new ListaDeReproducao(null);
		
	}
	
	@Test (expected = Exception.class)
	public void construtorListaDeReproducao2() throws Exception {
		new ListaDeReproducao("");
		
	}

	@Test
	public void testAdicionaMusica() {

		Assert.assertTrue(lista.adicionaMusica(musica1));
		Assert.assertTrue(lista.adicionaMusica(musica2));
		Assert.assertTrue(lista.adicionaMusica(musica3));

		Assert.assertTrue(lista.adicionaMusica(musica1));
		Assert.assertTrue(lista.adicionaMusica(musica2));
		Assert.assertTrue(lista.adicionaMusica(musica3));

	}
	@Test
	public void testGetNome() {
		Assert.assertEquals("nome", lista.getNome());

	}

	@Test
	public void testSetNome() {
		Assert.assertEquals("nome", lista.getNome());
		lista.setNome("novoNome");
		Assert.assertEquals("novoNome", lista.getNome());
		Assert.assertFalse(lista.getNome().equals("nome"));
		
		
	}

	@Test
	public void testEliminaMusica() {
		Assert.assertTrue(lista.adicionaMusica(musica1));
		Assert.assertTrue(lista.adicionaMusica(musica2));
		Assert.assertTrue(lista.adicionaMusica(musica3));

		Assert.assertTrue(lista.eliminaMusica(musica1));
		Assert.assertTrue(lista.eliminaMusica(musica2));
		Assert.assertTrue(lista.eliminaMusica(musica3));

		Assert.assertFalse(lista.eliminaMusica(musica1));
		Assert.assertFalse(lista.eliminaMusica(musica2));
		Assert.assertFalse(lista.eliminaMusica(musica3));

	}
	
	@Test
	public void testReproduzirLista() {
		
		assertEquals("Lista esta vazia!", lista.reproduzirListaEmSequencia());
		
		assertTrue(lista.adicionaMusica(musica1));
		assertTrue(lista.adicionaMusica(musica2));
		
		assertEquals(musica1.reproduzir() + musica2.reproduzir(), lista.reproduzirListaEmSequencia());
	}

	@Test
	public void testMusicas() {
				
		assertTrue(lista.musicas().size() == 0);
		lista.adicionaMusica(musica1);
		lista.adicionaMusica(musica2);
		
		assertTrue(lista.musicas().get(0).equals(musica1));
		assertTrue(lista.musicas().get(1).equals(musica2));
		assertTrue(lista.musicas().size() == 2);
	}

	@Test
	public void testRetornaMusica() throws Exception {
		
		assertEquals(null, lista.retornaMusica("1:2:3:4:5:6"));
		
		assertTrue(lista.adicionaMusica(musica1));
		assertTrue(lista.adicionaMusica(musica2));
		
		assertEquals(musica1, lista.retornaMusica("a1:a2:a3:a4:a5:a6"));
		assertEquals(null, lista.retornaMusica("d1:d2:d3:d4:d5:d6"));
		
	}

}
